package com.krediti.session;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityHome;

import com.krediti.entity.Korisnik;
import com.krediti.entity.KreditniZahtev;
import com.krediti.entity.Status;
import com.krediti.entity.StatusZahteva;
import com.krediti.entity.UgovorOKreditu;

@Name("ugovorOKredituHome")
public class UgovorOKredituHome extends EntityHome<UgovorOKreditu> {

	/**
	 * Generated serial version.
	 * 
	 */
	private static final long serialVersionUID = 5610814193717469115L;

	@In(create = true)
	KreditniZahtevHome kreditniZahtevHome;

	@In(value = "ulogovaniKorisnik", scope = ScopeType.SESSION, required = false)
	Korisnik korisnik;

	@In(create = true)
	StatusHome statusHome;

	@In(create = true)
	StatusZahtevaHome statusZahtevaHome;

	Status status;

	StatusZahteva statusZahteva;

	KreditniZahtev kreditniZahtev;

	public StatusZahteva getStatusZahteva() {
		return statusZahteva;
	}

	public void setStatusZahteva(StatusZahteva statusZahteva) {
		this.statusZahteva = statusZahteva;
	}

	String jmbgIn;
	boolean verifikovan = false;
	int brojVerifikovanja = 0;

	public String getJmbgIn() {
		return jmbgIn;
	}

	public void setJmbgIn(String jmbgIn) {
		this.jmbgIn = jmbgIn;
	}

	public void setUgovorOKredituId(Integer id) {
		setId(id);
	}

	public Integer getUgovorOKredituId() {
		return (Integer) getId();
	}

	@Override
	protected UgovorOKreditu createInstance() {
		UgovorOKreditu ugovorOKreditu = new UgovorOKreditu();
		return ugovorOKreditu;
	}

	public void wire() {
		getInstance();

		KreditniZahtev kreditniZahtev = kreditniZahtevHome.getDefinedInstance();

		if (kreditniZahtev != null) {
			getInstance().setKreditniZahtev(kreditniZahtev);
		}

		status = statusHome.findStatus("Sklopljen ugovor");
		if (status != null) {
			getInstance().getKreditniZahtev().setStatus(status);
		}

		java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
		getInstance().setDatumUgovora(date.toString());
		
		if(getInstance()!=null && getInstance().getId()!=null){
			getInstance().setBrojUgovora(kreirajBrojUgovora());
		}
	}

	private Integer kreirajBrojUgovora() {
		//TODO Trivijalan algoritam. U praksi je drugacije.
		return getInstance().getId()*100;
	}

	public boolean isWired() {
		return true;
	}

	public UgovorOKreditu getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public boolean verifikuj() {
		if (getJmbgIn().equals(korisnik.getJmbg())) {
			verifikovan = true;

			return true;
		}
		brojVerifikovanja = brojVerifikovanja + 1;
		return false;
	}

	public boolean isVerifikovan() {
		return verifikovan;
	}

	public int getBrojLogovanja() {
		return brojVerifikovanja;
	}

	/**
	 * Inserts new initial entity StatusZahteva.
	 * 
	 * @return Status
	 */
	public void saveStatusZahteva() {

		StatusZahteva statusZahteva = statusZahtevaHome.createInstance();
		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

		statusZahteva.setDatum(sdf.format(new Date()));

		status = statusHome.findStatus("Sklopljen ugovor");

		statusZahteva.setStatus(status);
		statusZahteva.setKreditniZahtev(kreditniZahtev);
		getEntityManager().persist(statusZahteva);
	}

	/**
	 * It is necesary to insert status confirmed in order to make history.
	 * 
	 */
	@Override
	public String persist() {
		super.persist();

		saveStatusZahteva();
		return "persisted";
	}

}
